#ifndef DYN_MULTIFUNCTOR_MULTIMAPS_H
#define DYN_MULTIFUNCTOR_MULTIMAPS_H

#include "dyn_multifunctor.h"

/*! \brief Multi-dimension dynamical maps.
 *
 * We define multi-dimensional maps.
 * In particular, we define the iterate()
 * and jacobian() methods, which iterate the map
 * and return the jacobian at a point.
 */
class MultiMaps : public MultiFunctor
{
public:
    /*! The base class constructor merely sets the period, which is common.*/
    MultiMaps(const int p){setPeriod(p);}

    /*! @name Basic Map Operations
     * We define the essential operations of the map.
     */
    //@{
    virtual colvec operator()(const colvec X)=0;
    virtual colvec iterate(const colvec X, int p)=0;
    virtual mat jacobian(const colvec X, int p)=0;
    //@}

    /*! @name Accessor functions.
     * Because the number of parameters vary
     * from map to map, we define only the period
     * accessor functions.
     */
    //@{
    virtual int getPeriod(){return period;}

    virtual void setPeriod(const int p){period = p;}
    //@}

protected:
    /*! The default iterate we want to study.*/
    int period;
};

#endif // DYN_MULTIFUNCTOR_MULTIMAPS_H
